//package core;
//
//import api.FetchProxyIp;
//import api.UpdateNeedChangePwdAccount;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import cron.CronJob;
//import dao.AccountInfo;
//import dao.ProxyConfig;
//import dao.Result;
//import utils.LoggerUtile;
//
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Timer;
//import java.util.TimerTask;
//
//public class ClearUpdataGarean {
//    String addr_security;
//    String addr_gamecenter;
//
//    AccountInfo accountInfo = new AccountInfo();
//
//    private  long startTime;
//
//    int reportRetryCount;
//    int retryCount;
//    int proxyRetryCount;
//    private  int proxyMaxRetry = 10;
//
//    private ProxyConfig proxyConfig = new ProxyConfig();
//
//    String[] errorMessages = {
//            "Proxy connection timed out",
//            "Socks5 proxy rejected connection",
//            "Socks5 Authentication failed",
//            "timeout of 30000ms exceeded",
//            "read ECONNRESET",
//            "connect ECONNREFUSED",
//            "Read timed out",
//            "Host unreachable",
//            "Malformed reply from SOCKS"
//    };
//
//    LoggerUtile logger;
//
//    public void star(String port, String port2,AccountInfo accountInfo2){
//        logger = LoggerUtile.getLogger("garenaJava-pwd-ClearUpdataGarean");
//        addr_security = port;
//        proxyRetryCount=1;
//        reportRetryCount=0;
//        retryCount=1;
//        addr_gamecenter = port2;
//        accountInfo = accountInfo2;
//        fetchProxy(null);
//    }
//    void fetchProxy(String dsip) {
//        try {
//            Map<String, Object> body = new HashMap<>();
//            body.put("proxyType", 1);
//            body.put("disableIp", (dsip != null ? dsip : null));
//            String response = FetchProxyIp.fetchProxyIp(addr_security, JSON.toJSONString(body));
//            logger.info("处理卡顿代理查询结果" + response);
//            JSONObject jsonObject = JSONObject.parseObject(response);
//            proxyConfig.setIp(jsonObject.getJSONObject("data").getString("ip"));
//            proxyConfig.setPort(Integer.valueOf(jsonObject.getJSONObject("data").getString("port")));
//            updatePassword();
//        } catch (Exception e) {
//            // 代理查询请求异常重试
//            if (proxyRetryCount < proxyMaxRetry) {
//                logger.info("处理卡顿代理IP查询失败,稍后重试" + e.getMessage() + " 当前第" +proxyRetryCount + "次");
//                proxyRetryCount++;
//                fetchProxy(null);
//                return;
//            }
//            logger.info("处理卡顿代理IP查询失败,重试结束" + e);
//            handleCompleted(new Result(-1, "处理卡顿代理IP查询异常", e));
//        }
//    }
//
//    void updatePassword() {
//        try {
//            long nowt = System.currentTimeMillis();
//            startTime = System.currentTimeMillis();
//            logger.info("开始第" + retryCount + "次处理卡顿改密任务" + JSON.toJSONString(accountInfo));
//            Map m = new HashMap();
//            m.put("data", JSON.toJSONString(accountInfo));
//            m.put("proxyConfig", proxyConfig);
//            m.put("taskType", 0);
//
//            UpdatePassword updatePassword = new UpdatePassword();
//            updatePassword.start(m, addr_security, addr_gamecenter).thenAccept(result -> {
//                logger.info("第" + retryCount + "次处理卡顿改密任务完成" + JSON.toJSONString(result));
//                retryCount++;
//                logger.info("处理卡顿改密耗时" + (System.currentTimeMillis() - nowt));
//                //第4次改密任务完成{"code":33,"data":{"id":"1699948818037","error":"error_auth"},"msg":"登录异常参数或密码错误"}
//                JSONObject parse = (JSONObject) JSONObject.parse(JSON.toJSONString(result));
//                int code = (int) parse.get("code");
//                // 验证码无法解决 或 HTTP异常
//                if ((code == 11 || code == -1) && retryCount < 10) {
//                    String msg = parse.getString("msg");
//                    if(msg!=null && msg.contains("需要验证")){
//                        logger.info("处理卡顿代理失效重新获取代理：" + proxyConfig.getIp());
//                        fetchProxy(proxyConfig.getIp());
//                        return;
//                    }
//                    String error = (String) parse.get("data");
//                    if (error != null) {
//                        for (String errorMessage : errorMessages) {
//                            if(error.contains(errorMessage)){
//                                logger.info("处理卡顿代理IP异常" + proxyConfig.getIp());
//                                fetchProxy(proxyConfig.getIp());
//                                return;
//                            }
//                        }
//                    }
//                    logger.info("处理卡顿连接异常重试 次数：" + retryCount);
//                    fetchProxy(proxyConfig.getIp());
//                    return;
//                }
//                handleCompleted(result);
//            });
//        } catch (Exception e) {
//            logger.error("处理卡顿任务处理异常" + e);
//        }
//
//    }
//
//    public  void handleCompleted(Object result) {
//        try {
//            String garenaAccount = accountInfo.getGarenaAccount();
//            String haoId = accountInfo.getHaoId();
//            String orderId = accountInfo.getOrderId();
//            for (int i = 0; i < CronJob.taskList.size(); i++) {
//                AccountInfo accountInfo1 = CronJob.taskList.get(i);
//                if (accountInfo1.getOrderId().equals(orderId)) {
//                    CronJob.taskList.remove(i);
//                    break; // 退出循环，因为已找到匹配项
//                }
//            }
//            Map<String, Object> formData = new HashMap<>();
//            formData.put("changePlatform", 1);
//            formData.put("garenaAccount", garenaAccount);
//            formData.put("haoId", haoId);
//            formData.put("orderId", orderId);
//            int code = ((Result) result).getCode();
//            String message = ((Result) result).getMsg();
//            Object data = ((Result) result).getData();
//            String nowPassword = "";
//            if (code == 0) {
//                JSONObject Jdata = (JSONObject) JSONObject.parse((String) data);
//                nowPassword = (String) Jdata.get("nowPassword");
//            }
//
//            formData.put("status", code == 0 ? 10 : 20);
//            formData.put("handleErrorCode", 4); // 4-默认 验证异常 网络异常等
//            formData.put("garenaPassword", code == 0 ? nowPassword : null);
//            formData.put("handleOriginalMsg", message);
//            formData.put("accessToken", "5ad9ba4e4a18d81457c3a8286e134f05");
//
//
//            if (code >= 20 && code < 30) formData.put("handleErrorCode", 3); // 账号无效/密码未知/key未知
//            if (code >= 30 && code < 40 || code == -3)
//                formData.put("handleErrorCode", 6); // 账号有效/密码无效/key未知 -3表示通过缓存session无法修改
//            if (code >= 60 && code < 70) formData.put("handleErrorCode", 7); // 账号有效/密码有效/key无效
//            if (code == 0) formData.put("handleErrorCode", 5); // 账号/密码/key都有效
//            String s = "";
//            try {
//                s = UpdateNeedChangePwdAccount.updateNeedChangePwdAccount(addr_security, JSON.toJSONString(formData));
//            } catch (Exception e) {
//
//            }
//            logger.info("更新改密结果完成" + s);
//            logger.info("改密任务全程耗时" + (System.currentTimeMillis() - startTime));
//        } catch (Exception error) {
//            logger.error("更新改密结果请求异常,一分钟后重试" + error);
//            reportRetryCount = reportRetryCount + 1;
//            if (reportRetryCount >= 3) return;
//            // 一分钟后重试 重试3次
//            scheduleRetry(result, 60 * 1000);
//        }
//    }
//
//    public  void scheduleRetry(Object result, long delay) {
//        Timer timer = new Timer();
//        timer.schedule(new TimerTask() {
//            @Override
//            public void run() {
//                handleCompleted(result);
//            }
//        }, delay);
//    }
//
//}
